'use strict';

const db = uniCloud.database();
const collection = db.collection('employeeFile'); // 对应员工信息表

/**
 * 员工信息管理云对象
 * 提供员工信息的增删改查功能
 */
module.exports = {
	_before: async function() {
		// 权限验证前置操作
		// 实际项目中可根据需要添加token验证等逻辑
		// this.userId = this.getClientInfo().userInfo?.uid;
		// if (!this.userId && this.getMethodName() !== 'getList') {
		// 	throw new Error('请先登录');
		// }
	},

	/**
	 * 获取员工列表
	 * @param {Object} params - 查询参数
	 * @param {string} params.keyword - 搜索关键词
	 * @param {string} params.department - 部门筛选
	 * @param {string} params.contractStatus - 合同状态筛选
	 * @param {number} params.page - 页码，默认1
	 * @param {number} params.pageSize - 每页条数，默认10
	 * @returns {Object} 包含员工列表和分页信息的对象
	 */
	async getList(params = {}) {
		const {
			keyword,
			department,
			contractStatus,
			mainBody,
			page = 1,
			pageSize = 10
		} = params;

		// 构建查询条件 - 初始为空对象
		let where = {};

		// 主体ID筛选 - 确保只查询指定主体的数据
		if (mainBody?.id) {
			where['mainBody.id'] = mainBody.id;
		}

		// 关键词搜索 - 使用and组合已有的查询条件
		if (keyword) {
			where = db.command.and(
				where, // 保留已有的查询条件（如mainBody.id）
				db.command.or({
					name: new RegExp(keyword, 'i')
				}, {
					phone: new RegExp(keyword, 'i')
				}, {
					idCard: new RegExp(keyword, 'i')
				})
			);
		}

		// 部门筛选 - 继续组合条件
		if (department && department !== '全部') {
			where = db.command.and(
				where, {
					department: department
				}
			);
		}

		// 合同状态筛选 - 继续组合条件
		if (contractStatus && contractStatus !== '全部') {
			where = db.command.and(
				where, {
					contractStatus: contractStatus
				}
			);
		}

		// 计算分页
		const skip = (page - 1) * pageSize;

		// 执行查询
		const query = collection.where(where);
		const total = await query.count();
		const data = await query.skip(skip).limit(pageSize).orderBy('createdAt', 'desc').get();

		return {
			code: 200,
			message: '获取成功',
			data: data.data,
			total: total.total,
			page,
			pageSize,
			totalPages: Math.ceil(total.total / pageSize)
		};
	},

	/**
	 * 获取单个员工详情
	 * @param {string} id - 员工ID
	 * @returns {Object} 员工详情对象
	 */
	async getDetail(id) {
		if (!id) {
			return {
				code: 400,
				message: '员工ID不能为空'
			};
		}

		const res = await collection.doc(id).get();

		if (!res.data || res.data.length === 0) {
			return {
				code: 404,
				message: '未找到该员工'
			};
		}

		return {
			code: 200,
			message: '获取成功',
			data: res.data[0]
		};
	},

	/**
	 * 添加新员工
	 * @param {Object} employee - 员工信息对象
	 * @returns {Object} 操作结果
	 */
	async add(employee) {
		// 验证必填字段
		if (!employee.name || !employee.phone) {
			return {
				code: 400,
				message: '姓名和手机号为必填项'
			};
		}

		// 补充创建时间和更新时间
		const now = new Date();
		const employeeData = {
			...employee,
			createdAt: now,
			updatedAt: now,
			createdBy: this.userId
		};

		// 插入数据
		const res = await collection.add(employeeData);

		return {
			code: 200,
			message: '添加成功',
			data: {
				_id: res.id
			}
		};
	},

	/**
	 * 更新员工信息
	 * @param {string} id - 员工ID
	 * @param {Object} employee - 要更新的员工信息
	 * @returns {Object} 操作结果
	 */
	async update(id, employee) {
		if (!id) {
			return {
				code: 400,
				message: '员工ID不能为空'
			};
		}

		// 验证必填字段
		if (employee.name === '' || employee.phone === '') {
			return {
				code: 400,
				message: '姓名和手机号不能为空'
			};
		}

		// 补充更新时间
		const updateData = {
			...employee,
			updatedAt: new Date(),
			updatedBy: this.userId
		};

		// 执行更新
		const res = await collection.doc(id).update(updateData);

		if (res.updated === 0) {
			return {
				code: 404,
				message: '未找到该员工或信息未变更'
			};
		}

		return {
			code: 200,
			message: '更新成功',
			data: {
				updated: res.updated
			}
		};
	},

	/**
	 * 删除员工
	 * @param {string} id - 员工ID
	 * @returns {Object} 操作结果
	 */
	async delete(id) {
		if (!id) {
			return {
				code: 400,
				message: '员工ID不能为空'
			};
		}
       
		// 执行删除
		const res = await collection.doc(id).remove();

		if (res.deleted === 0) {
			return {
				code: 404,
				message: '未找到该员工'
			};
		}

		return {
			code: 200,
			message: '删除成功',
			data: {
				deleted: res.deleted
			}
		};
	},
	async delFile(fileIds){
	const  res=await	uniCloud.deleteFile({
			fileList:fileIds
		})
		return res
		
	},
	

	/**
	 * 批量导入员工
	 * @param {Array} employees - 员工数组
	 * @returns {Object} 导入结果
	 */
	async batchImport(employees) {
		if (!Array.isArray(employees) || employees.length === 0) {
			return {
				code: 400,
				message: '请提供有效的员工数据'
			};
		}

		// 处理导入数据
		const now = new Date();
		const importData = employees.map(emp => ({
			...emp,
			createdAt: now,
			updatedAt: now,
			createdBy: this.userId,
			imported: true
		}));

		// 批量插入
		const res = await collection.add(importData);

		return {
			code: 200,
			message: `成功导入 ${res.ids.length} 条数据`,
			data: {
				ids: res.ids,
				successCount: res.ids.length,
				totalCount: employees.length
			}
		};
	}
};